package br.com.velp.sudecap.mb.diretoria;

import br.com.velp.sudecap.comum.BaseController;
import br.com.velp.sudecap.comum.InterfaceCadastro;
import br.com.velp.sudecap.entidade.Diretoria;
import br.com.velp.sudecap.enumerator.EnumSimNao;
import br.com.velp.sudecap.enumerator.PaginaEnum;
import br.com.velp.sudecap.service.DiretoriaService;
import br.com.velp.sudecap.util.JasperUtil;
import br.com.velp.sudecap.util.MensagemUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.faces.model.SelectItem;
import org.lindbergframework.spring.scope.AccessScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * <sumario>
 * <objetivo>"Rastreabilidade"</objetivo>
 * <autor>EDUARDO SANTOS DE OLIVEIRA</autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 04.10.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisito_afetado> N/A </requisito_afetado>
 * <descricao> Managed Bean Responsável Por Controlar as Operações de
 *             Inclusão/Alteração/Detalhamento de Diretorias 
 * </descricao>
 * </sumario>
 */
@Controller("manterDiretoria")
@AccessScoped
public class ManterDiretoria extends BaseController implements InterfaceCadastro {
    
    public static final Long serialVersionUID = 1L;
    
    private Diretoria diretoria;
    private Long idDiretoriaSelecionada;
    private boolean isDetalhamento;
    
    @Autowired
    private DiretoriaService diretoriaService;

    @Override
    public String setup() {
        
        inicializar();
        
        return PaginaEnum.MANTER_DIRETORIA.getValue();
        
    }

    @Override
    public String editSetup() {
        
        String pagina = setup();
        this.diretoria = this.diretoriaService.obterPorId(this.idDiretoriaSelecionada);
        
        return pagina;
        
    }

    @Override
    public String detalhar() {
        
        String pagina = editSetup();
        this.isDetalhamento = Boolean.TRUE;
        
        return pagina;
        
    }

    @Override
    public String salvar() throws Exception {
        
        try {
            
            if (this.diretoria.getId() == null) {
                this.diretoria.setIdUsuarioCadastro(getContexto().getUsuario().getId());
                this.diretoria.setDataCadastro(new Date());
                this.diretoriaService.salvar(this.diretoria);
            } else {
                this.diretoria.setIdUsuarioAlteracao(getContexto().getUsuario().getId());
                this.diretoria.setDataAlteracao(new Date());
                this.diretoriaService.atualizar(this.diretoria);
            }
            
            this.isDetalhamento = Boolean.TRUE;
            MensagemUtil.exibirMensagemInformacao(MensagemUtil.getMensagem("registro_salvo_sucesso"));
            
        } catch (Exception ex) {
            
            tratarExcessao(ex);
            
        }
        
        return null;
        
    }

    @Override
    public String voltar() {
        
        return PaginaEnum.CONSULTAR_DIRETORIA.getValue();
        
    }

    public void inicializar() {
        
        this.diretoria = new Diretoria();
        this.diretoria.setAtivo(Boolean.TRUE);
        this.isDetalhamento = Boolean.FALSE;
        
    }
    
    private HashMap<String, Object> getParametrosIreport(){
        
        HashMap<String, Object> parametros = obterParametrosPadraoRelatorios();
        parametros.put("TITULO", "CADASTRO DE DIRETORIAS");
        
        return parametros;
        
    }
    
    public String exportarCadastroXLS(){
        
        this.diretoria = this.diretoriaService.obterPorId(this.diretoria.getId());
        
        List diretoria = new ArrayList();
        diretoria.add(this.diretoria);
        
        JasperUtil.gerarArquivoXLS(
                "/relatorios/export_cadastro/diretoria/Cadastro_Diretoria.jasper", 
                "Cadastro_Diretoria", 
                diretoria, 
                getParametrosIreport());
        
        return null;
        
    }
    
    public String exportarCadastroPDF(){
        
        this.diretoria = this.diretoriaService.obterPorId(this.diretoria.getId());
        
        List diretoria = new ArrayList();
        diretoria.add(this.diretoria);
        
        JasperUtil.gerarArquivoPDF(
                "/relatorios/export_cadastro/diretoria/Cadastro_Diretoria.jasper", 
                "Cadastro_Diretoria", 
                diretoria, 
                getParametrosIreport());
        
        return null;
        
    }           

    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed">
    public List<SelectItem> getListaSimNao() {
        return obterSelectItemPopulado(true, EnumSimNao.values());
    }
    
    public Diretoria getDiretoria() {
        return diretoria;
    }

    public void setDiretoria(Diretoria diretoria) {
        this.diretoria = diretoria;
    }

    public Long getIdDiretoriaSelecionada() {
        return idDiretoriaSelecionada;
    }

    public void setIdDiretoriaSelecionada(Long idDiretoriaSelecionada) {
        this.idDiretoriaSelecionada = idDiretoriaSelecionada;
    }
    
    public boolean isIsDetalhamento() {
        return isDetalhamento;
    }

    public void setIsDetalhamento(boolean isDetalhamento) {
        this.isDetalhamento = isDetalhamento;
    }
    // </editor-fold>            
    
}
